메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

이아스님이 제공하는 자바 헤드라인

한빛미디어

|

2002-10-14

|

by HANBIT

7,822

저자: 이아스님(http://www.iasandcb.pe.kr)

JSR-13 십진 연산 개선 최종 권고안

우선은 JSR-13 십진 연산 개선 최종 권고안 소식부터 전해보죠. 기존의 자바 API에 있는 BigDecimal에 대한 보완인데요, IBM이 이에 대해 일찍부터 관심을 가지고 진행해왔습니다. 이미 자바 구현체가 웹사이트 상에 올라와 있을 정도니까요. (여기를 클릭해서 미리 맛보셔도 좋겠네요.)

디스플레이 태그 라이브러리

자세한 내용은 여기를 클릭하면 볼 수 있습니다. 국내에서 잘 쓰일만한 페이징 기능도 들어있군요. 한번 공동 개발을 제의해봄직도? ^^

무선 인터넷 기술

오랜만에 KWIS 포럼 LBS 분과 회의에 참석했습니다. 그간 변화가 있었는지 LGT와 KTF에서도 참석했으며, 상당히 많은 진척이 있습니다. 분과장이신 ETRI의 최혜옥 박사님에게 뜻하지 않는 칭찬을 받아 한순간 어쩔 줄 모르다가 할 말도 제대로 끝맺음을 하지 못했군요. T_T

각설하고, 한국 무선 인터넷 표준에 대한 흥미로운 뒷얘기 몇 가지를 전해보면,

위피(WIPI)의 상표 등록이 어렵게 되었다는군요. 똑같은 이름이 전에 있었던 것은 아닌데, 발음이 같은 WIFI가 있다네요. (WIFI는 무선 인터넷 상표로 소니 바이오 사이트에서 본 적이 있습니다.) 그래서 이미 위피는 세상에 많이 알려져 있어 바꾸기도 뭣하니, WIPI@(@는 All의 의미)라고 하고 읽기는 그냥 전처럼 위피라고 하자는 안으로 나가고 있답니다.

또 하나, 지금 핸드폰 단말기들마다 한글 입력 방식이 다르지요? 그것을 표준화하려는 시도가 있었는데 아주 난리라는군요. 어떻게든 단일화해서 사용자와 개발사 간의 혼란을 줄여주려는 찰라, 생떼처럼 들고 일어서는 존재들도 만만치 않아 현재 보류중이랍니다. 하긴, 천지인이 편하긴 한데...

아무튼 한국 무선 인터넷 기술이 세계를 선도해나아가는 모습을 조금씩 보여주고 있답니다. 많은 분들의 노고, 잊지 말아야겠죠?

주말 톰켓 대특집!

톰켓 클러스터링에 대해

먼저 아파치 웹 서버에 대해서는 여기를, 톰켓 분산 균형화는 여기를, 지니를 이용한 방법은 여기를 클릭하시면 참고하실 수 있습니다. 링크된 사이트에 소개되어 있습니다.

최근 JK2 커넥터(일명 코요테)가 정식 발표되었는데요, JK와 JK2 커넥터의 차이에 대해서는 여기에 자세히 나와있습니다만, JK2가 J2SE 1.4의 NIO를 쓴다니 성능 향상이 기대되는군요.

톰켓 4.1부터 갈리는 common과 shared 디렉토리의 용법
  • common: 카탈리나 내부 (클래스)와 웹 애플리케이션들이 공유하는 라이브러리 보관소
  • shared: 웹 애플리케이션들이 공유하는 라이브러리 보관소
  • server: 카탈리나 내부가 공유하는 라이브러리 보관소
그러면, 먼저 JSTL을 모든 컨텍스트가 공유하도록 설치해봅시다. 우선 가정할 환경은 JDK 1.4.1 + 톰켓 4.1.12에서 자카르타 태그립-스탠다드 1.0.1을 받은 후 압축을 풀어 lib에 있는 자 파일중 CATALINA_HOME/shared/lib에 다음과 같은 파일만 넣습니다. (톰켓 4.0대의 경우 CATALINA_HOME/lib에 넣습니다.)
jaxen-full.jar jstl.jar saxpath.jar standard.jar (총 4개) 
그리고 나서, JSTL을 쓰기 원하는 웹 애플리케이션은 압축을 푼 뒤 나오는 tld 디렉토리를 자신의 WEB-INF에 복사하고 web.xml을 다음과 같이 고칩니다.



Welcome to IAS&CB

Welcome to Ias" site


http://java.sun.com/jstl/core
/WEB-INF/tld/c.tld


(위의 경우는 core만 쓸 때)

그리고 난 후, 적절히 core 태그 라이브러리를 쓰는 테스트 페이지를 만들어 돌려보세요.

다음, MySQL에서 JNDI로 DB연결을 얻어와 봅시다. 그전에는 디비 풀링에 참으로 다양하고도 불안한 선택지들이 있었는데, 이제 아파치 자카르타 커먼스에서 DBCP를 제공하여 아주 편합니다.

먼저 커먼스 DBCP 패키지 1.0를 받습니다. (안타깝게도 톰켓 4.1.12에는 기본 포함되어 있지 않습니다.) 또한 DBCP가 의존하는 커먼스 풀(Pool) 패키지 1.0.1도 받습니다.

JDBC 드라이버는 MySQL 자바 커넥터 2.0.14 안정판을 썼습니다(참고로 3.0.1 개발판은 아래의 설정으로 잘 돌아가지 않습니다). 압축파일에 들어있는 JDBC 드라이버 자 패키지를 뽑아냅니다.

이렇게 해서 DBCP, 풀, JDBC 드라이버 세 개의 자 파일을 CATALINA_HOME/common/lib에 둡니다.

그리고 나서 해당 컨텍스트에 줄 JNDI 설정을 다음과 같이 해봅니다.

server.xml에는






factory
org.apache.commons.dbcp.BasicDataSourceFactory



maxActive
100



maxIdle
30



maxWait
10000



username
iasandcb


password
XXX



driverClassName
com.mysql.jdbc.Driver



url
jdbc:mysql://localhost:3306/iasandcb?autoReconnect=true



그리고 web.xml에는





Welcome to IAS&CB

Welcome to Ias" site


http://java.sun.com/jstl/core
/WEB-INF/tld/c.tld


DB Connection
jdbc/iasandcbDB
javax.sql.DataSource
Container


* 주의! web.xml을 규정하고 있는 DTD가 <|ELEMENT web-app (icon?, ..., taglib*, resource-ref*, ...)>과 같이 정의되어 있어 보다 먼저 와야 합니다. (참고로 , 대신 |을 써서 나열하면 순서 안지켜도 된답니다. 친절히 알려주신 자바지기님께 감사드립니다.) 아니면 SAX 오류 발생!
그러면 여기에 부합하는 DB를 만들어봅시다. MySQL 4.0.3 베타를 설치, 데몬을 띄운 후 mysql 셸에서 다음과 같이 실행합니다.
mysql> GRANT ALL PRIVILEGES ON *.* TO iasandcb@localhost 
-> IDENTIFIED BY "XXX" WITH GRANT OPTION;
mysql> create database iasandcb;
mysql> use iasandcb;
mysql> create table testdata (
-> id int not null auto_increment primary key,
-> foo varchar(25), 
-> bar int);

mysql> insert into testdata values(null, "hello", 12345);
Query OK, 1 row affected (0.00 sec)

mysql> select * from testdata;
+----+-------+-------+
| ID | FOO | BAR |
+----+-------+-------+
| 1 | hello | 12345 |
+----+-------+-------+
1 row in set (0.00 sec)
위와 같이 잘 된 것을 확인한 후, 테스트 애플리케이션을 만들어봅시다.

test.jsp는
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
ias&cb



<%
foo.DBTest tst = new foo.DBTest();
tst.init();
%>

Results

Foo <%= tst.getFoo() %>
Bar <%= tst.getBar() %>
(JSTL core와 함께 테스트합니다.)

여기에 쓸 클래스인 DBTest.java
package foo;

import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class DBTest {

String foo = "Not Connected";
int bar = -1;

public void init() {
try{
Context ctx = new InitialContext();
if(ctx == null ) 
throw new Exception("Boom - No Context");
DataSource ds = 
(DataSource)ctx.lookup(
"java:comp/env/jdbc/iasandcbDB");

if (ds != null) {
Connection conn = ds.getConnection();

if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst = 
stmt.executeQuery(
"select id, foo, bar from testdata");
if(rst.next()) {
foo=rst.getString(2);
bar=rst.getInt(3);
}
conn.close();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}

public String getFoo() { return foo; }
public int getBar() { return bar;}
}
JDK 1.4가 깔려있으므로 컴파일은 간단히 WEB-INF/classes/foo에 위의 소스파일을 두고 그 위치에서 javac DBTest.java 하면 됩니다.

이렇게 만전을 기하고 나서 톰켓을 띄운 후 test.jsp을 불러보면 결과가 잘~ 나옵니다.

편리한 리로드 기능

먼저 tomcat-users.xml에 자신만의 계정을 넣습니다.


다음에 http://localhost:8080/mananger/reload?path=/iasandcb와 같이 리로드 명령을 바로 내리면 계정 정보를 묻고 잘 답하면 리로드 완료! 톰켓 4.1은 classes뿐만 아니라 web.xml, lib도 리로드합니다. 특히 위의 iasandcb 컨텍스트 설정과 같이 reloadable를 false로 주고 리로드를 명시적, 수동적으로 하게 하면 애플리케이션 서비스시 성능상의 이점이 있습니다.

톰켓 사용자 관리는 Realm이라고 해서 DB로도 할 수 있죠.

jakarta.apache-korea.org

아파치 자카르타 프로젝트의 문서를 우리말로 옮기는 일을 하는 조그만 모임이 공식적으로 그 결과물을 사이트로 열었습니다. 그 이름은 "자카르타-서울" 프로젝트, jakarta.apache-korea.org 입니다. 인도네시아의 수도인 자카르타와 대한민국의 수도인 서울을 잇는 의미를 지녔는데요, 많은 분들의 관심과 참여로 한국 자바 웹 개발자의 위상을 세계 만방에 드높힐 수 있으면 하는 소망이 있습니다. 꿈☆은 이루어지겠죠?
TAG :
댓글 입력
자료실

최근 본 책0